package org.example.utils;


import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;

public class PinyinUtil {

    /**
     * 获取汉字串拼音首字母，英文字符不变
     *
     * @param chineseName 汉字串
     * @return 汉语拼音首字母
     */
    public static String getFirstLittleName(String chineseName) {

        if (StringUtils.isBlank(chineseName)) {
            return "#";
        }
        StringBuffer buffer = new StringBuffer();
        char[] arr = chineseName.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 128) {
                try {
                    String[] _t = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
                    if (_t != null) {
                        buffer.append(_t[0].charAt(0));
                    } else {
                        buffer.append("#");
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    return "#";
                }
            } else {
                buffer.append(arr[i]);
            }
        }
        return buffer.toString().trim().toLowerCase();
    }

    /**
     * 获取汉字串拼音，英文字符不变
     *
     * @param chinese 汉字串
     * @return 汉语拼音
     */
    public static String getPinYinName(String chinese) {

        if (StringUtils.isBlank(chinese)) {
            return "#";
        }
        StringBuffer pybf = new StringBuffer();
        char[] arr = chinese.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 128) {
                try {
                    String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
                    if (ObjectUtils.isNotEmpty(pinyin) && ObjectUtils.isNotEmpty(pinyin[0])) {
                        pybf.append(pinyin[0]);
                    } else {
                        pybf.append("#");
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    return "#";
                }
            } else {
                pybf.append(arr[i]);
            }
        }
        return pybf.toString().toLowerCase();
    }
}
